home *** CD-ROM | disk | FTP | other *** search
/ Visual Basic Source Code / Visual Basic Source Code.iso / vbsource / wavemix / wavemix.bas < prev    next >
BASIC Source File  |  1995-09-09  |  8KB  |  229 lines

  1. Attribute VB_Name = "WAVEMIX"
  2. Option Explicit
  3. '------------------------------------------------------------
  4. ' WAVEMIX.BAS
  5. ' This module contains declarations for all the functions
  6. ' in the WaveMix DLL, and provides some higher-level Basic
  7. ' functions to make using WaveMix simpler.
  8. '------------------------------------------------------------
  9. Global hWaveMix As Long
  10. Global lpWaveMix() As Long
  11. Global WaveHandle As Long
  12. Global WAVMIX_Quiet As Integer
  13.  
  14. Global Const WAVEMIX_MAXCHANNELS = 8
  15.  
  16. Type tChannelInfo
  17.     Loops As Long
  18.     WaveFile As String
  19. End Type
  20.  
  21.  
  22. Type WAVEMIXINFO
  23.    wSize As Integer
  24.    bVersionMajor As String * 1
  25.    bVersionMinor As String * 1
  26.    szDate(12) As String
  27.    dwFormats As Long
  28. End Type
  29.  
  30. Type MIXCONFIG
  31.     wSize As Integer
  32.     dwFlagsLo As Integer
  33.     dwFlagsHi As Integer
  34.     wChannels As Integer
  35.     wSamplingRate As Integer
  36. End Type
  37.  
  38. Private Type MIXPLAYPARAMS
  39.     wSize         As Integer
  40.     hMixSessionLo As Integer
  41.     hMixSessionHi As Integer
  42.     iChannelLo    As Integer
  43.     iChannelHi    As Integer
  44.     lpMixWaveLo   As Integer
  45.     lpMixWaveHi   As Integer
  46.     hWndNotifyLo  As Integer
  47.     hWndNotifyHi  As Integer
  48.     dwFlagsLo     As Integer
  49.     dwFlagsHi     As Integer
  50.     wLoops        As Integer
  51. End Type
  52.  
  53. Declare Function WaveMixInit Lib "WAVMIX32.DLL" () As Long
  54. Declare Function WaveMixConfigureInit Lib "WAVMIX32.DLL" (lpConfig As MIXCONFIG) As Long
  55. Declare Function WaveMixActivate Lib "WAVMIX32.DLL" (ByVal hMixSession As Long, ByVal fActivate As Integer) As Long
  56. Declare Function WaveMixOpenWave Lib "WAVMIX32.DLL" (ByVal hMixSession As Long, szWaveFilename As Any, ByVal hInst As Long, ByVal dwFlags As Long) As Long
  57. Declare Function WaveMixOpenChannel Lib "WAVMIX32.DLL" (ByVal hMixSession As Long, ByVal iChannel As Long, ByVal dwFlags As Long) As Long
  58. Declare Function WaveMixPlay Lib "WAVMIX32.DLL" (lpMixPlayParams As Any) As Integer
  59. Declare Function WaveMixFlushChannel Lib "WAVMIX32.DLL" (ByVal hMixSession As Long, ByVal iChannel As Integer, ByVal dwFlags As Long) As Integer
  60. Declare Function WaveMixCloseChannel Lib "WAVMIX32.DLL" (ByVal hMixSession As Long, ByVal iChannel As Integer, ByVal dwFlags As Long) As Integer
  61. Declare Function WaveMixFreeWave Lib "WAVMIX32.DLL" (ByVal hMixSession As Long, ByVal lpMixWave As Long) As Integer
  62. Declare Function WaveMixCloseSession Lib "WAVMIX32.DLL" (ByVal hMixSession As Long) As Integer
  63. Declare Sub WaveMixPump Lib "WAVMIX32.DLL" ()
  64. Declare Function WaveMixGetInfo Lib "WAVMIX32.DLL" (lpWaveMixInfo As WAVEMIXINFO) As Integer
  65.  
  66. Private Function HiWord(ByVal l As Long) As Integer
  67.     l = l \ &H10000
  68.     
  69.     HiWord = Val("&H" & Hex$(l))
  70. End Function
  71.  
  72. Private Function LoWord(ByVal l As Long) As Integer
  73.     l = l And &HFFFF&
  74.     
  75.     LoWord = Val("&H" & Hex$(l))
  76. End Function
  77.  
  78.  
  79. Function WAVMIX_AddFile(FileName As String) As Integer
  80. '------------------------------------------------------------
  81. ' Open a wave file and assign it to the next available
  82. ' channel.
  83. '------------------------------------------------------------
  84. Dim wRtn As Long
  85.  
  86.     WAVMIX_AddFile = False
  87.     If WAVMIX_Quiet Then Exit Function
  88.     If WaveHandle + 1 = WAVEMIX_MAXCHANNELS Then Exit Function
  89.  
  90.     ReDim Preserve lpWaveMix(WaveHandle)
  91.     lpWaveMix(WaveHandle) = WaveMixOpenWave(hWaveMix, ByVal FileName, 0, 0)
  92.     wRtn = WaveMixOpenChannel(hWaveMix, WaveHandle, 0)
  93.     WAVMIX_AddFile = WaveHandle
  94.     WaveHandle = WaveHandle + 1
  95. End Function
  96.  
  97. Sub WAVMIX_SetFile(FileName As String, AChannel As Long)
  98. '------------------------------------------------------------
  99. ' Assign a new wave file, FileName, to the specified channel,
  100. ' AChannel.  If this channel is currently assigned another
  101. ' wave file, stop playing the channel and free the active
  102. ' wave file.
  103. '------------------------------------------------------------
  104. Dim wRtn As Long
  105.     
  106.     If WAVMIX_Quiet Then Exit Sub
  107.     
  108.     If AChannel > UBound(lpWaveMix) Then
  109.         ReDim Preserve lpWaveMix(AChannel)
  110.         WaveHandle = AChannel
  111.     End If
  112.     
  113.     ' If another wave is currently assigned to this
  114.     ' channel, free it.
  115.     If lpWaveMix(AChannel) <> 0 Then
  116.         WAVMIX_StopChannel AChannel
  117.         wRtn = WaveMixFreeWave(hWaveMix, lpWaveMix(AChannel))
  118.     End If
  119.     
  120.     ' Open the new wave and assign it to this channel.
  121.     lpWaveMix(AChannel) = WaveMixOpenWave(hWaveMix, ByVal FileName, 0, 0)
  122.     wRtn = WaveMixOpenChannel(hWaveMix, AChannel, 0)
  123. End Sub
  124.  
  125.  
  126. Sub WAVMIX_Close()
  127. '------------------------------------------------------------
  128. ' Stop playing all channels and free all wave files, then
  129. ' close down this WaveMix session.
  130. '------------------------------------------------------------
  131. Dim wRtn As Long
  132. Dim i As Integer, rc As Integer
  133.     
  134.     If WAVMIX_Quiet Then Exit Sub
  135.  
  136.     If (hWaveMix <> 0) Then
  137.         For i = 0 To UBound(lpWaveMix)
  138.             If lpWaveMix(i) <> 0 Then
  139.                 WAVMIX_StopChannel CLng(i)
  140.                 rc = WaveMixFreeWave(hWaveMix, lpWaveMix(i))
  141.             End If
  142.         Next
  143.         wRtn = WaveMixCloseSession(hWaveMix)
  144.         hWaveMix = 0
  145.     End If
  146. End Sub
  147.  
  148. Function WAVMIX_InitMixer() As Integer
  149. '------------------------------------------------------------
  150. ' Initialize and activate the WaveMix DLL.
  151. '------------------------------------------------------------
  152. Dim wRtn As Long
  153. Dim config As MIXCONFIG
  154.  
  155.     If WAVMIX_Quiet Then Exit Function
  156.  
  157.     WaveHandle = 0
  158.     ReDim lpWaveMix(0)
  159.     ChDir App.Path
  160.     
  161.     config.wSize = Len(config)
  162.     config.dwFlagsHi = 1
  163.     config.dwFlagsLo = 0
  164.     'Allow stereo sound
  165.     config.wChannels = 2
  166.     hWaveMix = WaveMixConfigureInit(config)
  167.     wRtn = WaveMixActivate(hWaveMix, True)
  168.  
  169.     If (wRtn <> 0) Then
  170.         WAVMIX_InitMixer = False
  171.         Call WaveMixCloseSession(hWaveMix)
  172.         hWaveMix = 0
  173.     Else
  174.         WAVMIX_InitMixer = True
  175.     End If
  176. End Function
  177.  
  178. Sub WAVMIX_StopChannel(ByVal ChannelNum As Long)
  179. '------------------------------------------------------------
  180. ' Stop playing the specified channel.
  181. '------------------------------------------------------------
  182. Dim rc As Integer
  183.  
  184.     If WAVMIX_Quiet Then Exit Sub
  185.     If (hWaveMix = 0) Then Exit Sub
  186.     
  187.     rc = WaveMixFlushChannel(hWaveMix, ChannelNum, 0)
  188. End Sub
  189.  
  190. Sub WAVMIX_Activate(Activate As Long)
  191. '------------------------------------------------------------
  192. ' Activate the WaveMix DLL.
  193. '------------------------------------------------------------
  194. Dim rc As Integer
  195.  
  196.     If WAVMIX_Quiet Then Exit Sub
  197.     If (hWaveMix = 0) Then Exit Sub
  198.  
  199.     rc = WaveMixActivate(hWaveMix, Activate)
  200. End Sub
  201.  
  202. Sub WAVMIX_PlayChannel(ChannelNum As Long, LoopWave As Long)
  203. '------------------------------------------------------------
  204. ' Play a specified channel, and indicate whether the sound
  205. ' should be looped.
  206. '------------------------------------------------------------
  207. Dim params As MIXPLAYPARAMS
  208. Dim wRtn As Long
  209.  
  210.     If WAVMIX_Quiet Then Exit Sub
  211.     If ChannelNum > UBound(lpWaveMix) Then Exit Sub
  212.     If (hWaveMix = 0) Then Exit Sub
  213.  
  214.     params.wSize = Len(params)
  215.     params.hMixSessionLo = LoWord(hWaveMix)
  216.     params.hMixSessionHi = HiWord(hWaveMix)
  217.     params.iChannelLo = LoWord(ChannelNum)
  218.     params.iChannelHi = HiWord(ChannelNum)
  219.     params.lpMixWaveLo = LoWord(lpWaveMix(ChannelNum))
  220.     params.lpMixWaveHi = HiWord(lpWaveMix(ChannelNum))
  221.     params.hWndNotifyLo = 0
  222.     params.hWndNotifyHi = 0
  223.     params.dwFlagsHi = 5
  224.     params.dwFlagsLo = 0
  225.     params.wLoops = LoopWave
  226.     wRtn = WaveMixPlay(params)
  227. End Sub
  228.  
  229.